package com.inno.thread.hello;

import com.inno.thread.myutils.SleepUtils;

/**
 * 启动2个线程，消费countDown，目前并发出现问题：线程不会结束
 * 解决方案： 逻辑错误导致，让线程睡眠观察出来的问题出现的原因
 *
 * @author May
 * @time 2020/3/22 19:10
 * @see
 */
public class QuestionThread extends Thread {
    /** 倒计时 */
    private static volatile int countDown = 50;

    public QuestionThread(String name) {
        super(name);
    }

    @Override
    public String toString() {
        return "#" + getName() + "(" + countDown + "), ";
    }

    @Override
    public void run() {
        while (true) {
            // 需要保证是同一个锁
            synchronized (QuestionThread.class) {
                System.out.print(this);
                int i = countDown;
                System.out.println("i = " + i);
                SleepUtils.second(1);
                if (i == 0) {
                    // 使用return 结束线程任务无线循环（run方法）
                    return;
                }
                countDown--;
            }
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            // 使用构造方法，初始化线程名称，并启动线程
            new QuestionThread("线程" + i).start();
//            System.out.println("i = " + i);
        }
    }
}
